package com.furb.pub.apresentacao;

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Vector;

import javax.swing.DefaultComboBoxModel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.border.EmptyBorder;
import javax.swing.table.DefaultTableModel;

import com.furb.pub.controle.sistema.Cliente;
import com.furb.pub.controle.sistema.Mesa;
import com.furb.pub.controle.sistema.PedidoCliente;
import com.furb.pub.controle.sistema.Setor;
import com.furb.pub.controle.sistema.Sistema;

public class FrmPedido extends JFrame {

    private JPanel contentPane;
    private JTable tblPedidos;
    private JComboBox<String> cbMesa = new JComboBox();
    private JComboBox cbSetor = new JComboBox();
    private boolean add;
    public static Sistema sistema;

    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        sistema = Sistema.getInstance();
        EventQueue.invokeLater(new Runnable() {

            public void run() {
                try {
                    FrmPedido frame = new FrmPedido();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     * 
     * @throws Exception
     */
    public FrmPedido() throws Exception {
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setBounds(100, 100, 597, 415);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);

        JPanel pnlFiltro = new JPanel();
        contentPane.add(pnlFiltro, BorderLayout.NORTH);

        cbSetor = new JComboBox<String>();
        cbSetor.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                try {
                    //					cbMesa = new JComboBox<String>(carregarMesas(cbSetor.getSelectedItem().toString()));
                    carregarMesas();
                } catch (Exception e1) {
                    e1.printStackTrace();
                }
            }
        });

        pnlFiltro.add(cbSetor);

        cbMesa = new JComboBox();
        cbMesa.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                carregarPedidos();
            }
        });
        pnlFiltro.add(cbMesa);

        JButton btnNovoPedido = new JButton("Novo pedido");
        btnNovoPedido.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                FrmNovoPedido frmNovoPedido;
				try {
					frmNovoPedido = new FrmNovoPedido(new PedidoCliente());
					frmNovoPedido.show();
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
            }
        });
        pnlFiltro.add(btnNovoPedido);

        JPanel pnlPedidos = new JPanel();
        contentPane.add(pnlPedidos, BorderLayout.CENTER);
        pnlPedidos.setLayout(new GridLayout(0, 1, 0, 0));

        tblPedidos = new JTable(new DefaultTableModel(new Object[] { "Nome", "Setor" }, 0));
        pnlPedidos.add(tblPedidos);

        carregarSetores();
        carregarMesas();
        carregarPedidos();
    }

    private void carregarPedidos() {
        DefaultTableModel model = (DefaultTableModel) tblPedidos.getModel();
        tblPedidos.removeAll();
        for (Setor s : sistema.getSetores()) {
            if (cbSetor.getSelectedItem().toString().equals(s.getNome())) for (Mesa m : s.getMesas()) {
                if (cbMesa.getSelectedItem().toString().equals(m.getNumero())) for (Cliente c : m.getClientes()) {
                    for (PedidoCliente p : c.getPedidos()) {
                        model.addRow(new Object[] { c.getNome(), p.getProduto().getNome(), p.getQuantidade(), (p.getQuantidade() * p.getProduto().getValor()) });
                    }
                }
            }
        }
        //		model.addRow(new Object[] {"Pedido 01", "Setor 01"});
        //		model.addRow(new Object[] {"Pedido 02", "Setor 01"});
    }

    private void carregarMesas() throws Exception {
        try {
            cbMesa.removeAllItems();
            String setorSelecionado = cbSetor.getSelectedItem().toString();
            Vector<String> comboBoxItems = new Vector<String>();
            for (Setor s : sistema.getSetores()) {
                if (s.getNome().equals(setorSelecionado)) for (Mesa m : s.getMesas()) {
                    comboBoxItems.add("" + m.getNumero());
                }
            }
            final DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>(comboBoxItems);
            cbMesa.setModel(model);
        } catch (Exception e) {
            throw new Exception("Erro ao carregar mesas");
        }
    }

    private void carregarSetores() throws Exception {
        try {
            Vector<String> comboBoxItems = new Vector<String>();
            for (Setor s : sistema.getSetores()) {
                comboBoxItems.add(s.getNome());
            }
            final DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>(comboBoxItems);
            cbSetor.setModel(model);
        } catch (Exception e) {
            throw new Exception("Erro ao carregar setores");
        }
    }

}
